package aspects;

import java.util.HashMap;

public aspect ContadorLlamadasPerTargetAspect pertarget(instanceCreation()){

	HashMap<String, Integer> hashCounter = new HashMap<>();

	// Para instanciacion del aspecto al momento de crear la persona
	pointcut instanceCreation():
		execution(dominio.*.new(..));  // CAMBIOS!

	pointcut monitoredCall(Object objeto):
		call (@Monitored * dominio.*.* (..)) && target(objeto);  // CAMBIOS!

	before(Object objeto): monitoredCall(objeto) {

		String nombreMetodo = thisJoinPoint.getSignature().getName();

		if (hashCounter.containsKey(nombreMetodo)) {

			hashCounter.put(nombreMetodo, hashCounter.get(nombreMetodo) + 1);
		} else {
			hashCounter.put(nombreMetodo, 1);
		}
	}

	public int cantLlamadas(String nombreMetodo) {

		return hashCounter.containsKey(nombreMetodo) ? hashCounter
				.get(nombreMetodo) : 0;
	}

}